package chunzhao.Jun_26;

/**
 * @Classname Eight
 * @Description TODO
 * @Date 2024/1/26 19:21
 * @Created by ZHL17
 */
// 友塔游戏第二题
/**
 * 题目描述
 * 给你一个位数不超过 100 的非负整数 N（不含前导 0）。你的任务是判断这个数字能否通过去掉其中的一些位上的数（当然不能去掉全部），使其成为一个能被 8 整除的正整数（不含前导 0）。特别注意：你不能重新排列数字的顺序。
 *
 * 输入输出格式
 * 输入：一行，表示正整数 N。保证 N 不超过 100 位。
 * 输出：如果不能达成条件，则输出 “NO”（不含引号）；如果可以，输出 “YES”，并在第二行输出最终能被 8 整除的那个结果。如果有多解，则输出任意解。
 */
public class Eight {
    public static void main(String[] args) {
        String number = "154678";
        System.out.println(isDo(number));
    }

    /**
     * 我们只考虑，最后删的只剩一位，两位，和三位时的情况、因为一旦数>1000, 可以分离出来。 1000 % 8 == 0 ，只看后三位即可。
     * @param number
     * @return
     */
    public static boolean isDo(String number) {
        // 只剩一位数时
        if (number.contains("8") || number.contains("0")) {
            return true;
        }
        // 只剩二位数时
        for (int i = 0; i < number.length() - 1; i++) {
            for (int j = i + 1; j < number.length(); j++) {
                int v = (number.charAt(i) - '0') * 10 + number.charAt(j) - '0';
                if (v % 8 == 0) {
                    return true;
                }
            }
        }
        //剩余>=三位数
        for (int i = 0; i < number.length() - 2; i++) {
            for (int j = i + 1; j < number.length() - 1; j++) {
                for (int k = j + 1; k < number.length(); k++) {
                    int v = (number.charAt(i) - '0') * 100 + (number.charAt(j) - '0') * 10 + number.charAt(k) - '0';
                    if (v % 8 == 0) {
                        return true;
                    }
                }
            }
        }
        return false;
    }
}
